﻿// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//正则表达式

#include <iostream>
#include<regex>
#include<vector>
using namespace std;
int main()
{/*
   //匹配 单个字符\\w=>数字、字母、下划线
	string pattern = "\\w";//正则表达式\w,转义
	//编译正则表达式
	regex reg(pattern);
	//定义普通字符串
	string ch = "H";
	//匹配函数regex_match
	bool rex = regex_match(ch, reg);
	cout << rex << endl;
	//获取返回类型
	//保存匹配结果
	smatch results;
	regex_match(ch, results, reg);
	cout << results.str() << endl;
	//\\d 数字\\s 空白
	// []匹配括号中的任意字符
	// 结果为A
	regex reg("[a-zA-Z0-9_]");
	string ch = "A";
	smatch results;
	regex_match(ch, results, reg);
	cout << results.str() << endl;
	//[ab]hello=>ahello,bhello
	//多个字符匹配*   +
	//*匹配0个或多个，+匹配一个或多个
	//regex_match(ch, results, reg);//from head to foot
	//regex_search(ch, results, reg);//从目标字符串中去查找匹配成功的字符
	regex reg("[ab]\\w+");
	string ch = "cahello";
	string ch = "ahello bhello";//结果为ahello,只取第一个符合的
	smatch results;
	//regex_match(ch, results, reg);//
	regex_search(ch, results, reg);//结果为ahello
	cout << results.str() << endl;


	regex reg("[ab].+");//"."号除了换行都能匹配，结果为ahello bhello
	string ch = "ahello bhello";
	//字符串匹配结束的位置   $
	//匹配开始的位zhi   ^
	//a开始
	regex reg("^a[a-z]+llo");//
		string ch = "ahello bhello";//ahello
		regex reg("^a[a-z]+llo$");
		string ch = "ahello bhello";//ahello bhello
		regex reg("^b[a-z]+llo");
		string ch = "ahello bhello";//nothing
		//?匹配0个或1 个
		string str = "hello 123";
		regex reg("\\d+");
		regex reg("\\d+?");//结果为1
		//贪心匹配
		//可以设置匹配字符的个数{n,m} n~m
		regex reg("\\d{3,10}");
		string str = "hello 12 world 666127";//667127
			//^a开头   [^a]=>表示否定，不能匹配a字符*/
		vector<string> vt = { "12345","18282559937","13699301124"};
		regex reg("^1[^4&&7]$\\d{11,11}");
		smatch results;
		bool res;
		for (auto&:vt) {
			res = regex_match(vt, results, reg);
			if (res) {
				cout << results.str() << endl;
			}
		}
		//regex_match(vt. results, reg);
		//cout << results.str() << endl;
		
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
